package servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import dao.UserDao;
import entity.User;
import utils.ServerResponse;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;



//用户的映射地址有"/user"和“/user/login”

@WebServlet(name = "UserServlet",urlPatterns = {"/user","/user/login"})

public class UserServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //获取用户的请求进行什么操作，如添加、更新、删除和查询操作

        String action=request.getParameter("action");

        //创建ObjectMapper对象，用于把json数据转换成字符串

        ObjectMapper objectMapper=new ObjectMapper();

        //删除用户

        if("deleteByPrimaryKey".equals(action)){

            //获取用户要删除用户信息关键字id

            int id=Integer.parseInt(request.getParameter("id"));

            String str=null;

            //判断删除是否成功

            if(UserDao.deleteByPrimaryKey(id)){

                //把成功的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createBySuccess("删除指定用户成功"));

                //输出到客户端

                response.getWriter().println(str);

            }else{

                //把失败的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createByErrorMessage("删除指定用户失败"));

                //输出到客户端

                response.getWriter().println(str);

            }



        }



        //登录操作即action=login,表示登录。

        if("login".equals(action)){

            //获取用户发送的用户名

            String userName=request.getParameter("username");

            //获取用户发送的密码

            String password=request.getParameter("password");

            String str=null;

            //判断用户名和密码登录是否存在，若存在则登录，并在session中保存用记信息，方便用户不用在登录

            if(UserDao.login(userName,password)){

                //登录用户和密码存在，则把用户信息读取出来

                User mu= UserDao.selectLogin(userName,password);

                //定义HttpSession对象，用于存放用户信息

                HttpSession session=request.getSession();

                //把用户信息保存在session对象中，方便后进入其它页面不用在登录。

                session.setAttribute("us",mu);

                //把成功的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createBySuccessMessage("登录成功"));

                //输出到客户端

                response.getWriter().println(str);

            }else{

                //把失败的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createByErrorMessage("登录失败"));

                //输出到客户端

                response.getWriter().println(str);

            }

        }



        //退出登录

        if("logout".equals(action)){

            String str=null;

            //创建HttpSession对象

            HttpSession session=request.getSession();

            //清除用户所有的session信息。只是用户本身的信息，这样用户访问网站页面，要重新登录

            session.invalidate();

            //把成功的json数据格式转换成字符串

            str=objectMapper.writeValueAsString(ServerResponse.createBySuccessMessage("退出成功"));

            //输出到客户端

            response.getWriter().println(str);

        }



        //添加用户，其实就是注册信息

        if("insert".equals(action)){

            //定义用户实体类对象

            User user=new User();

            //获取用户发送过来的信息

            String username=request.getParameter("username");

            String password=request.getParameter("password");

            String email=request.getParameter("email");

            String phone=request.getParameter("phone");

            String question=request.getParameter("question");

            String answer=request.getParameter("answer");

            //给用户实体对象属性赋值

            user.setUsername(username);

            user.setPassword(password);

            user.setEmail(email);

            user.setPhone(phone);

            user.setQuestion(question);

            user.setAnswer(answer);

            user.setRole(1);

            String str=null;

            //添加用户信息

            if(UserDao.insert(user)){

                //把成功的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createBySuccessMessage("添加用户成功"));

                //输出到客户端

                response.getWriter().println(str);

            }else{

                //把失败的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createByErrorMessage("添加用户失败"));

                //输出到客户端

                response.getWriter().println(str);

            }

        }



        //修改密码，必须是用户登录的状态下

        if("resetPassword".equals(action)){

            //用户名

            String username=request.getParameter("username");

            //旧密码

            String oldpassword=request.getParameter("oldpassword");

            //新密码

            String newpassword=request.getParameter("newpassword");

            String str=null;

            //判断密码修改是否成功

            if(UserDao.resetPassword(username,oldpassword,newpassword)){

                //把成功的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createBySuccessMessage("登录成功"));

                //输出到客户端

                response.getWriter().println(str);

            }else{

                //把失败的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createByErrorMessage("登录失败"));

                //输出到客户端

                response.getWriter().println(str);

            }

        }



        //修改用户的基本信息

        if("updateByPrimaryKey".equals(action)){

            //创建用户实体类的对象

            User user=new User();

            //获取用户发送信息

            int id=Integer.parseInt(request.getParameter("id"));

            String username=request.getParameter("username");

            String password=request.getParameter("password");

            String email=request.getParameter("email");

            String phone=request.getParameter("phone");

            String question=request.getParameter("question");

            String answer=request.getParameter("answer");

            int role=Integer.parseInt(request.getParameter("role"));

            //给用户实体对象属性赋值

            user.setId(id);

            user.setUsername(username);

            user.setPassword(password);

            user.setEmail(email);

            user.setPhone(phone);

            user.setQuestion(question);

            user.setAnswer(answer);

            user.setRole(role);

            String str=null;

            //判断用户更新是否成功

            if(UserDao.updateByPrimaryKey(user)){

                //把成功的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createBySuccessMessage("登录成功"));

                //输出到客户端

                response.getWriter().println(str);

            }else{

                //把失败的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createByErrorMessage("登录失败"));

                //输出到客户端

                response.getWriter().println(str);

            }

        }



        //获取用户所有信息

        if("getalldata".equals(action)){

            //创建用户集合对象

            List<User> list=null;

            //定义记录总数

            int total=0;

            //获取用户发送过来的第几页

            int pagenum=Integer.parseInt(request.getParameter("pagenum"));

            //获取用户发送过来的每一页显示多少条记录。

            int pagesize=Integer.parseInt(request.getParameter("pagesize"));

            //获取用户发送过来的条件

            String query=request.getParameter("query").trim();

            //判断条件是否为空

            if(query =="" || query ==null){

                //条件为空，则获取所有用户信息

                list= UserDao.getAllData(pagenum,pagesize);

                //获取没有条件的记录总数

                total=UserDao.getRecordCount(null);

            }else{

                //条件不为空，则按条件方式获取用户信息

                list=UserDao.getAllData(query,pagenum,pagesize);

                //按条件获取记录的总数

                total=UserDao.getRecordCount(query);

            }



            String str=null;

            //判断用户集合是否为空

            if(list != null && list.size()>0){

                //把成功的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createBySuccess("获取数据成功",list));

                //在输出的json字符串中添加记录总数

                str="{\"total\":"+total+","+str.substring(1,str.length());

                //输出到客户端

                response.getWriter().println(str);

            }else{

                //把失败的json数据格式转换成字符串

                str=objectMapper.writeValueAsString(ServerResponse.createByErrorMessage("获取数据失败"));

                //输出到客户端

                response.getWriter().println(str);

            }

        }

        

    }



    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request, response);

    }

}

